/* 
axios二次封装
1. 配置基础地址和超时时间  axios.create({baseURL:xx, timeout:xx })
2. 显示请求加载进度 nprogress模块  在请求拦截器显示 响应拦截器结束
3. 请求头自动携带token  请求拦截器
4. 请求成功返回响应体数据 响应拦截器成功回调返回response.data
5. 请求失败提示错误  响应拦截器失败回调
6. 响应码401错误 自动跳转到登录页面  得到响应状态码:error.response.status
*/


import axios from 'axios'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken, removeToken, removeUser } from '../utils/storageUtils'

const request = axios.create({
  // baseURL: 'http://localhost:8081', // 基础路径
  baseURL:'/api',  //  用proxy解决跨域
  
  timeout: 20000 // 超时时间 
})


// 添加请求拦截器
request.interceptors.request.use(config => {
  // 显示进度条
  NProgress.start()
  // 携带请求头
  const token = getToken()
  if (token) config.headers['token'] = token
  // 必须返回config
  return config
})

// 添加响应拦截器
request.interceptors.response.use(
  response => {
    // 结束进度条
    NProgress.done()
    // 返回响应体数据
    return response.data
  },
  error => {
    // 结束进度条
    NProgress.done()
    // 请求失败提示错误
    alert('出错了'+error.message)
    // 得到错误的响应状态码
    console.log(error.response.status);
    const status = error.response.status
    // 判断响应状态码  如果是401说明token已经过期
    if (status === 401) {
      // 清除保存的用户信息和token
      removeToken()
      removeUser()
      // 跳转到登陆页面
      window.location = '/login.html'
    }
    // 向后传递错误
    throw error
  }
)
// 默认暴露request
export default request
